/*
 * Pipeline.java
 *
 * Created on July 31, 2006, 12:34 AM
 *
 * (C) R. Alexander Milowski alex@milowski.com
 */

package org.infoset.xproc;

import java.net.URI;
import java.util.Map;
import java.util.Set;
import org.infoset.component.ComponentDefinition;
import org.infoset.xml.Name;

/**
 * An instance of a compiled pipeline.  Pipelines can be retrieved
 * from this instance by invoking getDefinition.newInstance().  That
 * invocation will return a Component instance that represents the
 * pipeline
 *
 * Each Component instance return is not a re-entrant object.  As
 * such, the pipeline can be compiled once but to use the same 
 * pipeline simultaneously, different Component instances must be used.
 *
 * @author R. Alexander Milowski
 */
public interface Pipeline {

   /**
    * A convience method for getDefintion().getName()
    */
   Name getName();
   
   /**
    * Returns the ComponentDefinition for the pipeline;
    */
   ComponentDefinition getDefinition();
   
   Set<URI> getExcludedNamespaces();

   /*
    * Returns application properties associated with this pipeline.  The standard
    * properties are:
    * <ul>
    *    <li>'name' - the name of the pipeline (org.infoset.xml.Name</li>
    *    <li>'location' - the location of the pipeline document (java.net.URI)</li>
    *    <li>'loaded-at' - the time at which the pipeline was loaded (java.util.Date)</li>
    * </ul>
    */
   Map<String,Object> getProperties();

}
